<?php
/**
 * Класс - менеджер очереди, содержит в себе логику добавления фида в очередь для скачивания. 
 * Для принятия решения о добавлении используются поле ttl самого потока, если его нет то используется поле этого объекта 
 * $default_ttl в качестве значения по умолчанию.
 * 
 * @author Alexander Sibiryakov
 **/
class RssQueueManager {
	private $dlq;
	private $rfl;
	const default_ttl = 25; // минуты
	
	public function __construct(Model_RssDLQueue $dlqueue, Model_RssFeedList $rfl) {
		$this->dlq = $dlqueue;
		$this->rfl = $rfl;
	}
	
	/**
	 * Проверить состояние очереди, если что добавить необходимые закачки
	 * 
	 * @return void
	 */
	public function manageQueue() {
		// взять из $this->rfl список всех подписок и про каждую спросить время ее последнего скачивания
		// если это время больше чем ttl для записи, то добавить в очередь
		$this->dlq->initDLSession();
		foreach ($this->rfl->getFeedList() as $k=>$feed) {
			if ($this->dlq->isDLToFeed($feed['oid'])) continue; // не стоит добавлять второй раз в очередь
			
			$last_dl = $this->dlq->getLastDLByFeed($feed['oid']); 
			if (!$last_dl) {
				// оказывается нету у нас успешного последнего раза
				// значит будет :)
				$this->dlq->addDL($feed['oid']);
				continue;
			}
			
			// проверить разность current_umark - $umark, если больше чем $feed['ttl']*60, то добавляем закачку
			if (isset($feed['ttl'])) $ttl = $feed['ttl'];
				else $ttl = self::default_ttl;
			
			$ttl = 0; // удобно для принудительного обновления
			
			$current_ts = mktime();
			//var_dump($current_ts - $last_dl->getLastDLTimestamp()); выводит разницу между последним временем обновления фида и текущим
			if ($current_ts - $last_dl->getLastDLTimestamp() > $ttl * 60) {
				$this->dlq->addDL($feed['oid']);
			}
			
		}
		
	}
}
?>
